'use strict';

const mysql = require('mysql');

// 创建连接配置（建议使用环境变量）
const getDBConnection = () => {
	return mysql.createConnection({
		host: '139.196.18.189', // 替换为你的 MySQL 地址
		port: 3306,
		user: 'test1', // 用户名
		password: process.env.DB_PASSWORD || 'G2ttKES3pGyiPhiM', // 推荐使用环境变量
		database: 'test1' // 数据库名
	});
};

// 封装查询为 Promise
const query = (sql, values) => {
	return new Promise((resolve, reject) => {
		const conn = getDBConnection();

		conn.connect(err => {
			if (err) return reject({
				code: -1,
				msg: '数据库连接失败',
				error: err.message
			});

			conn.query(sql, values, (error, results) => {
				if (error) {
					reject({
						code: -1,
						msg: 'SQL执行错误',
						error: error.message
					});
				} else {
					resolve({
						code: 0,
						data: results
					});
				}
				conn.end(); // 关闭连接
			});

			// 处理连接错误
			conn.on('error', (err) => {
				console.error('数据库连接出错:', err);
			});
		});
	});
};

/**
 * 云函数入口
 */
exports.main = async (event, context) => {
	console.log('收到请求:', event);

	const {
		action,
		name,
		age
	} = event;

	try {
		let result;

		switch (action) {
			// ✅ 新增
			case 'add':
				if (!name || typeof age !== 'number') {
					return {
						code: -1,
						msg: '参数错误：需提供 name 和 age'
					};
				}
				result = await query('INSERT INTO renyuan SET ?', {
					name,
					age
				});
				return {
					code: 0, msg: '添加成功', insertId: result.data.insertId
				};

				// ❌ 删除
			case 'delete':
				if (!name) {
					return {
						code: -1,
						msg: '参数错误：需提供 name'
					};
				}
				result = await query('DELETE FROM renyuan WHERE name = ?', [name]);
				if (result.data.affectedRows === 0) {
					return {
						code: 0,
						msg: '未找到匹配记录'
					};
				}
				return {
					code: 0, msg: `删除成功，影响 ${result.data.affectedRows} 行`
				};

				// 🔁 修改
			case 'update':
				if (!name || typeof age !== 'number') {
					return {
						code: -1,
						msg: '参数错误：需提供 name 和新的 age'
					};
				}
				result = await query('UPDATE renyuan SET age = ? WHERE name = ?', [age, name]);
				if (result.data.affectedRows === 0) {
					return {
						code: 0,
						msg: '未找到匹配记录'
					};
				}
				return {
					code: 0, msg: `更新成功，影响 ${result.data.affectedRows} 行`
				};

				// 🔍 查询
			case 'get':
				let sql = 'SELECT * FROM renyuan';
				let values = [];
				if (name) {
					sql += ' WHERE name = ?';
					values = [name];
				}
				result = await query(sql, values);
				return {
					code: 0, data: result.data, total: result.data.length
				};

			default:
				return {
					code: -1, msg: '无效操作：支持 add, delete, update, get'
				};
		}
	} catch (e) {
		console.error('操作失败:', e);
		return {
			code: -1,
			msg: '服务器内部错误',
			error: e.msg || e.message
		};
	}
};